package com.example.garagemfacil.persistencia;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.example.garagemfacil.negocio.Estacionamento;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class EstacionamentoDAO {
	public EstacionamentoDAO(Context context) {
		this.context = context;

	}

	private final String NOME = "nome";
	private final String CNPJ = "cnpj";
	private final String VAGAS = "vagas";
	private final String VAGASDINAMICA = "vagasdinamico";
	private final String ENDERECO = "endereco";
	private final String BAIRRO = "bairro";
	private final String CEP = "cep";
	private final String TELEFONE = "telefone";
	private final String SERVICOS = "servicos";
	private final String VALORHORA = "precodahora";
	private final String VALOREXCEDENTE = "horaexcedente";
	private final String VALORRESERVA = "valorreserva";
	private final String DESCRICAO = "descricao";
	private final String LOGIN = "login";
	private final String SENHA = "senha";
	private final String EMAIL = "email";
	private final String DATA_ID = "_id";

	private final String TABLE_NAME = "estacionamento";
	private final String DB_NAME = "garagemfacil.db";
	public final int DB_VERSION = 2;

	private final Context context;
	private DBHelper MyHelper;
	private SQLiteDatabase database;
	

	class DBHelper extends SQLiteOpenHelper {
		
		public DBHelper(Context context) {
			super(context, DB_NAME, null, DB_VERSION);
		
			
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			String sql = "CREATE TABLE "+TABLE_NAME+" ( "+DATA_ID
					+ " INTEGER PRIMARY KEY, "+NOME+" TEXT, "+CNPJ
					+" TEXT, "+VAGAS+" INTEGER, "+VAGASDINAMICA+" INTEGER, "+ENDERECO+" TEXT, "
					+BAIRRO+" TEXT, "+CEP+" TEXT, "+TELEFONE
					+ " TEXT, "+EMAIL+" TEXT, "+SERVICOS+" TEXT,"
					+VALORHORA+" REAL, "+VALOREXCEDENTE+" REAL, "
					+VALORRESERVA+" REAL, "+DESCRICAO+" TEXT,"+LOGIN
					+" TEXT, "+SENHA+" TEXT)";
			db.execSQL(sql);

		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME+" ");
			onCreate(db);
		}
	}

		 
	public EstacionamentoDAO open() {
		MyHelper = new DBHelper(context);
		database = MyHelper.getWritableDatabase();
		return this;
	}

	public void close() {
		database.close();
	}

	public Boolean deletarestacionamento(String id) {
		Boolean resp = false;

		try {
			this.open();
			database.execSQL("DELETE * FROM "+TABLE_NAME+" WHERE "
					+DATA_ID+" = '"+id+"' ");
			resp = true;

		} catch (SQLException e) {
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(
					Level.SEVERE, null, e);
		} finally {
			this.close();
		}
		return resp;
	}
	
	public int UpdateEstacionamento(Estacionamento est){
		int ret=0;
		try {
			this.open();
			ContentValues valores = new ContentValues();
			valores.put(NOME, est.getNome());
			valores.put(CNPJ, est.getCnpj());
			valores.put(VAGAS, est.getVagas());
			valores.put(VAGASDINAMICA, est.getVagasdin());
			valores.put(ENDERECO, est.getEndereco());
			valores.put(BAIRRO, est.getBairro());
			valores.put(CEP, est.getCep());
			valores.put(TELEFONE, est.getTelefone());
			valores.put(EMAIL, est.getEmail());
			valores.put(SERVICOS, est.getServicos());
			valores.put(VALORHORA, est.getValorHora());
			valores.put(VALOREXCEDENTE, est.getValorExcedente());
			valores.put(VALORRESERVA, est.getValorReserva());
			valores.put(DESCRICAO, est.getDescricao());
			valores.put(LOGIN, est.getLogin());
			valores.put(SENHA, est.getSenha());

			ret= database.update(TABLE_NAME, valores, DATA_ID +"=?", new String [] {est.getIdestacionamento()});

		} catch (SQLException e) {
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(Level.SEVERE,null, e);
		} finally {
			this.close();
		}return ret;
	}


	public Estacionamento inserir(Estacionamento est) {

		try {
			this.open();
			ContentValues valores = new ContentValues();
			valores.put(NOME, est.getNome());
			valores.put(CNPJ, est.getCnpj());
			valores.put(VAGAS, est.getVagas());
			valores.put(VAGASDINAMICA, est.getVagasdin());
			valores.put(ENDERECO, est.getEndereco());
			valores.put(BAIRRO, est.getBairro());
			valores.put(CEP, est.getCep());
			valores.put(TELEFONE, est.getTelefone());
			valores.put(EMAIL, est.getEmail());
			valores.put(SERVICOS, est.getServicos());
			valores.put(VALORHORA, est.getValorHora());
			valores.put(VALOREXCEDENTE, est.getValorExcedente());
			valores.put(VALORRESERVA, est.getValorReserva());
			valores.put(DESCRICAO, est.getDescricao());
			valores.put(LOGIN, est.getLogin());
			valores.put(SENHA, est.getSenha());
			database.insert(TABLE_NAME, null, valores);

		} catch (SQLException e) {
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(
					Level.SEVERE, null, e);
		} finally {
			this.close();
		}
		return est;

	}

	public Estacionamento checar(String login, String senha) {
		
		Estacionamento est = null;
		Cursor cursor = null;
		try {
			this.open();
			String sql="SELECT * FROM "+TABLE_NAME+" WHERE "+LOGIN+" LIKE '"+login+"' AND "+SENHA+" LIKE '"+senha+"' ";
			cursor = database.rawQuery(sql, null);
			if (cursor.moveToFirst()) {
				do{
				est = new Estacionamento();
				est.setIdestacionamento(cursor.getString(cursor.getColumnIndex(DATA_ID)));
				est.setNome(cursor.getString(cursor.getColumnIndex(NOME)));
				est.setCnpj(cursor.getString(cursor.getColumnIndex(CNPJ)));
				est.setVagas(cursor.getInt(cursor.getColumnIndex(VAGAS)));
				est.setVagasdin(cursor.getInt(cursor.getColumnIndex(VAGASDINAMICA)));
				est.setEndereco(cursor.getString(cursor.getColumnIndex(ENDERECO)));
				est.setBairro(cursor.getString(cursor.getColumnIndex(BAIRRO)));
				est.setCep(cursor.getString(cursor.getColumnIndex(CEP)));
				est.setTelefone(cursor.getString(cursor.getColumnIndex(TELEFONE)));
				est.setEmail(cursor.getString(cursor.getColumnIndex(EMAIL)));
				est.setServicos(cursor.getString(cursor.getColumnIndex(SERVICOS)));
				est.setValorHora(cursor.getDouble(cursor.getColumnIndex(VALOREXCEDENTE)));
				est.setValorReserva(cursor.getDouble(cursor.getColumnIndex(VALORRESERVA)));
				est.setDescricao(cursor.getString(cursor.getColumnIndex(DESCRICAO)));
				est.setLogin(cursor.getString(cursor.getColumnIndex(LOGIN)));
				est.setSenha(cursor.getString(cursor.getColumnIndex(SENHA)));
				}while(cursor.moveToNext());
				
			}

		} catch (SQLException e) {
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(Level.SEVERE,null, e);

		} finally {
			cursor.close();
			this.close();
		}
		return est;
	}
	
	public ArrayList<Estacionamento> getAll(String bairro) {
		
			Estacionamento est = null;
			ArrayList<Estacionamento> estacionamentos = new ArrayList<Estacionamento>();
			Cursor cursor = null;
			try {
				this.open();
				String sql="SELECT * FROM "+TABLE_NAME+" WHERE "+BAIRRO+" = '"+bairro+"' ORDER BY "+VAGAS+" DESC";
				cursor = database.rawQuery(sql, null);
				if (cursor.moveToFirst()) {
					do{
					est = new Estacionamento();
					est.setIdestacionamento(cursor.getString(cursor.getColumnIndex(DATA_ID)));
					est.setNome(cursor.getString(cursor.getColumnIndex(NOME)));
					est.setCnpj(cursor.getString(cursor.getColumnIndex(CNPJ)));
					est.setVagas(cursor.getInt(cursor.getColumnIndex(VAGAS)));
					est.setVagasdin(cursor.getInt(cursor.getColumnIndex(VAGASDINAMICA)));
					est.setEndereco(cursor.getString(cursor.getColumnIndex(ENDERECO)));
					est.setBairro(cursor.getString(cursor.getColumnIndex(BAIRRO)));
					est.setCep(cursor.getString(cursor.getColumnIndex(CEP)));
					est.setTelefone(cursor.getString(cursor.getColumnIndex(TELEFONE)));
					est.setEmail(cursor.getString(cursor.getColumnIndex(EMAIL)));
					est.setServicos(cursor.getString(cursor.getColumnIndex(SERVICOS)));
					est.setValorHora(cursor.getDouble(cursor.getColumnIndex(VALORHORA)));
					est.setValorExcedente(cursor.getDouble(cursor.getColumnIndex(VALOREXCEDENTE)));
					est.setValorReserva(cursor.getDouble(cursor.getColumnIndex(VALORRESERVA)));
					est.setDescricao(cursor.getString(cursor.getColumnIndex(DESCRICAO)));
					est.setLogin(cursor.getString(cursor.getColumnIndex(LOGIN)));
					est.setSenha(cursor.getString(cursor.getColumnIndex(SENHA)));
					
					estacionamentos.add(est);//adiciona ao arraylist
					
					}while(cursor.moveToNext());
					
				}

			} catch (SQLException e) {
				Logger.getLogger(EstacionamentoDAO.class.getName()).log(Level.SEVERE,null, e);

			} finally {
				cursor.close();
				this.close();
			}
			return estacionamentos;//retorna o arraylist de objtos do tipo estacionamento

		}
	
	public ArrayList<Estacionamento> getFromBairro(String bairro) {
		
		Estacionamento est = new Estacionamento();
		ArrayList<Estacionamento> estacionamentos = new ArrayList<Estacionamento>();
		Cursor cursor = null;
		try {
			this.open();
			String sql="SELECT * FROM "+TABLE_NAME+" WHERE "+BAIRRO+" = '"+bairro+"' ORDER BY "+VAGAS+" DESC";
			cursor = database.rawQuery(sql, null);
			if (cursor.moveToFirst()) {
				do{
				est.setIdestacionamento(cursor.getString(cursor.getColumnIndex(DATA_ID)));
				est.setNome(cursor.getString(cursor.getColumnIndex(NOME)));
				est.setCnpj(cursor.getString(cursor.getColumnIndex(CNPJ)));
				est.setVagas(cursor.getInt(cursor.getColumnIndex(VAGAS)));
				est.setVagasdin(cursor.getInt(cursor.getColumnIndex(VAGASDINAMICA)));
				est.setEndereco(cursor.getString(cursor.getColumnIndex(ENDERECO)));
				est.setBairro(cursor.getString(cursor.getColumnIndex(BAIRRO)));
				est.setCep(cursor.getString(cursor.getColumnIndex(CEP)));
				est.setTelefone(cursor.getString(cursor.getColumnIndex(TELEFONE)));
				est.setEmail(cursor.getString(cursor.getColumnIndex(EMAIL)));
				est.setServicos(cursor.getString(cursor.getColumnIndex(SERVICOS)));
				est.setValorHora(cursor.getDouble(cursor.getColumnIndex(VALORHORA)));
				est.setValorExcedente(cursor.getDouble(cursor.getColumnIndex(VALOREXCEDENTE)));
				est.setValorReserva(cursor.getDouble(cursor.getColumnIndex(VALORRESERVA)));
				est.setDescricao(cursor.getString(cursor.getColumnIndex(DESCRICAO)));
				est.setLogin(cursor.getString(cursor.getColumnIndex(LOGIN)));
				est.setSenha(cursor.getString(cursor.getColumnIndex(SENHA)));
				
				estacionamentos.add(est);//adiciona ao arraylist
				
				}while(cursor.moveToNext());
				
			}

		} catch (SQLException e) {
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(Level.SEVERE,null, e);

		} finally {
			cursor.close();
			this.close();
		}
		return estacionamentos;//retorna o arraylist de objtos do tipo estacionamento

	}


	
	public Estacionamento getEstacionamento(String nome){

		Estacionamento est = null;
		Cursor cursor = null;
		try {
			this.open();
			String sql="SELECT * FROM "+TABLE_NAME+" WHERE "+NOME+" = '"+nome+"' ";
			cursor = database.rawQuery(sql, null);
			if (cursor.moveToFirst()) {
				do{
				est=new Estacionamento();
				est.setIdestacionamento(cursor.getString(cursor.getColumnIndex(DATA_ID)));
				est.setNome(cursor.getString(cursor.getColumnIndex(NOME)));
				est.setCnpj(cursor.getString(cursor.getColumnIndex(CNPJ)));
				est.setVagas(cursor.getInt(cursor.getColumnIndex(VAGAS)));
				est.setVagasdin(cursor.getInt(cursor.getColumnIndex(VAGASDINAMICA)));
				est.setEndereco(cursor.getString(cursor.getColumnIndex(ENDERECO)));
				est.setBairro(cursor.getString(cursor.getColumnIndex(BAIRRO)));
				est.setCep(cursor.getString(cursor.getColumnIndex(CEP)));
				est.setTelefone(cursor.getString(cursor.getColumnIndex(TELEFONE)));
				est.setEmail(cursor.getString(cursor.getColumnIndex(EMAIL)));
				est.setServicos(cursor.getString(cursor.getColumnIndex(SERVICOS)));
				est.setValorHora(cursor.getDouble(cursor.getColumnIndex(VALORHORA)));
				est.setValorExcedente(cursor.getDouble(cursor.getColumnIndex(VALOREXCEDENTE)));
				est.setValorReserva(cursor.getDouble(cursor.getColumnIndex(VALORRESERVA)));
				est.setDescricao(cursor.getString(cursor.getColumnIndex(DESCRICAO)));
				est.setLogin(cursor.getString(cursor.getColumnIndex(LOGIN)));
				est.setSenha(cursor.getString(cursor.getColumnIndex(SENHA)));
				
				}while(cursor.moveToNext());
		}

		} catch (SQLException e) {
			
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(Level.SEVERE,null, e);

		} finally {
			cursor.close();
			this.close();
		}
		return est;
		
	}
	public boolean setVagasDin(String id, int vagasdin){

		Boolean ret=false;
		Cursor cursor = null;
		try {
			this.open();
			String sql="UPDATE "+TABLE_NAME+" SET "+VAGASDINAMICA+" = '"+vagasdin+"' WHERE "+DATA_ID+" = '"+id+"' ";
			cursor = database.rawQuery(sql, null);
			ret=true;
		} catch (SQLException e) {
			
			Logger.getLogger(EstacionamentoDAO.class.getName()).log(Level.SEVERE,null, e);

		} finally {
			cursor.close();
			this.close();
		}
		return ret;
		
	}

}
